﻿//===========================[ 8 / 7 / 2011 LVI ]=============================
//				Copyright c Vitaly Lyaschenko <SkyChameleon@gmail.com>
// 								Header file
// Purpose: менеджер шейдерных программ
//=============================================================================
#pragma once

#include "common.h"
#include "cShaderProgram.h"
//#include "Singleton.h"

class cProgramManager //: public cSingleton<cProgramManager>
{
public:
	cProgramManager();
	~cProgramManager();
	// создает программу из исходников и ложит ее в "стек"
	static bool createProgram( const char* VertFile, const char* fragFile, const char* nameProgram = (const char*)m_ShaderProgram.size()+1 );
	static bool createProgram( cShaderProgram *program, const char* nameProgram = (const char*)m_ShaderProgram.size()+1 );
	//static cShaderProgram* popProgram( int num ) { return m_ShaderProgram[num]; } 
	static cShaderProgram* at( const std::string &nameProg ) 
	{ 
		return m_ShaderProgram[nameProg]; 
	}
	// возвращает id программы
	static uint getIDProgram( const std::string &nameProg ) 
	{ 
		return m_ShaderProgram[nameProg]->getID();
	}
	static void removeProgram( const std::string &nameProg ) 
	{ 
		m_ShaderProgram.erase(nameProg); 
	}
	// возвращает общее количество созданных программ
	static int getNumProgram() 
	{ 
		return m_ShaderProgram.size(); 
	}

private:
	static std::map< std::string, cShaderProgram* > m_ShaderProgram;

	static void clearAllProgram() 
	{ 
		m_ShaderProgram.clear(); 
	}
};

